/**
 * PHOSIDE: PHosphorylation Site IDentification Engine.
 * Copyright 2009 Digital Biology Lab, University of Missouri.
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation; either version 3 of the License, or (at your option) any later
 * version. <p/> This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the License for more
 * details.
 */

package phoside.data.nr;

import java.util.List;
import java.util.Set;

import phoside.Protein;

import phoside.data.util.PhosphoDataUtil;

/**
 *
 * @author gjj
 */
public class ProteinSelectorPhosphoPreferred implements ProteinSelector {

    /**
     * {@inheritDoc}
     */
    public Protein select(List<Protein> proteinCluster) {
        if (proteinCluster==null || proteinCluster.isEmpty()) {
            return null;
        }

        Protein ret = proteinCluster.get(0);
        Set<Integer> sites = PhosphoDataUtil.getSites(ret);
        int maxSites = sites==null?0:sites.size();
        String sequence = ret.getSequence();
        int maxLen = sequence.length();

        int n = proteinCluster.size();
        for (int i=1; i<n; i++) {
            Protein pro = proteinCluster.get(i);
            sites = PhosphoDataUtil.getSites(pro);
            sequence = pro.getSequence();
            if (sites!=null && sites.size()>maxSites) {
                maxSites = sites.size();
                maxLen = sequence.length();
                ret = pro;
            } else if ((sites==null&&maxSites==0)
                    ||(sites!=null&&sites.size()==maxSites)) {
                if (sequence.length()>maxLen) {
                    maxLen = sequence.length();
                    ret = pro;
                }
            }
        }

        return ret;
    }
}
